
// 定义了一个根路径
const baseURL = 'https://api-hmugo-web.itheima.net/api/public/v1';

// 需求：多个请求完成，才最终隐藏导航 loading
// 定义一个变量用于记录请求的格式
let axiosCount = 0;

// params 代表 axios 调用时候传递的所有参数
export const axios = (params) => {

    // 自己手写拦截器，拦截所有包含 /my/ 的路径
    if (params.url.indexOf('/my/') > -1) {
        // 拦截住，添加 Authorization 请求头。
        const token = wx.getStorageSync('token');
        // 如果没有 token，跳转到授权页面
        if (!token) {
            wx.navigateTo({ url: '/pages/auth/index', });
        } else {
            // 有 token 就在 request 请求参数中添加 Authorization : token  
            // 因为 header 默认不存在，所以要赋值个对象
            params.header = {
                Authorization: token
            };
        }
    }

    // 发送请求前，显示导航栏 loading  (不和 showToast 冲突)
    wx.showNavigationBarLoading();
    // 发起一个请求，次数就累加
    axiosCount++;

    // resolve   成功时的回调函数
    // reject    失败时的回调函数
    return new Promise((resolve, reject) => {
        // wx 请求的 API
        wx.request({
            // 解构所有参数
            ...params,
            // 基本路径 + 请求地址
            url: baseURL + params.url,
            // success 成功的回调对应 resolve 成功
            success: (result) => {
                // console.log(result);
                // 调用 resolve 函数
                // 传递实参，也就是请求成功后返回的核心数据
                resolve(result.data.message);
            },
            // fail   失败时的回调函数 reject 失败
            fail: (error) => {
                // 调用 reject 函数
                // reject(error);
                wx.showToast({
                    title: '数据获取失败，请重试',
                    icon: 'none',
                    // 提示停留的时间
                    duration: 200,
                });
            },
            complete: () => {
                // 完成一个请求，次数就减少
                axiosCount--;
                // 所有请求都完成了，计数器为 0，隐藏 loading
                if (axiosCount === 0) {
                    // 由于 loading 不会自动消失，所以请求成功失败都隐藏掉
                    wx.hideNavigationBarLoading();
                }
            }
        });
    });
};

// axios({ url: 'url', method: 'get', data: { aa: 'bb' } }).then();
// 简写
// axios.get('url').then();
// axios.get('url', { aa: 'bb' }).then();
// axios.post('url', { aa: 'bb' }).then();

// 简写 - 参数进行了简写
axios.get = (url, data = {}) => {
    // 就是把简写的参数重新处理一下
    let params = { url, data };
    // 内部调用 axios() 方法，记得返回 Promise 对象
    return axios(params);
};

axios.post = (url, data = {}) => {
    let params = { url, data, method: "POST" };
    return axios(params);
};


// axios({
//   url:'',
//   method:'get'
// })
// .then(res=>{
//    把拿到的数据进行绑定
// })